package com.mikufufu.blog.service;

import com.mikufufu.blog.model.entity.Nav;
import com.mikufufu.blog.model.vo.admin.NavVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 导航信息表 服务类
 * 
 */
public interface NavService extends IService<Nav>{

    /**
     * 获取导航树
     * 该方法同名但功能可能有别于getTree方法，具体用途根据实现而定。
     * @return 返回一个包含导航树的List<NavVO>对象。
     */
    List<NavVO> getNavTree();

    /**
     * 获取指定父级导航的子列表
     * 通过指定父级导航的ID，获取该父级导航下的所有子导航。
     * @param parentId 父级导航的ID
     * @return 返回一个包含指定父级导航下所有子导航的List<NavVO>对象。
     */
    List<NavVO> listByParentId(Integer parentId);

    /**
     * 根据父级ID和状态获取导航子列表
     * 用于获取特定父级导航下，并且状态匹配的子导航列表。
     * @param parentId 父级导航的ID
     * @param status 导航的状态
     * @return 返回一个符合条件的导航子列表List<NavVO>对象。
     */
    List<NavVO> listByParentIdAndStatus(Integer parentId, Integer status);

    /**
     * 为角色添加导航
     * 将指定的导航与角色关联起来。
     * @param roleId 角色的ID
     * @param navId 导航的ID
     * @return 返回一个表示操作成功或失败的Boolean对象。
     */
    Boolean addRoleNav(Integer roleId, Integer navId);

    /**
     * 根据角色ID获取导航树状结构列表。
     * 
     * @param roleId 角色的唯一标识符，用于确定角色拥有的导航权限。
     * @return 返回一个NavVO对象的列表，这些对象组成了指定角色的导航树。
     */
    List<NavVO> getTreeByRoleId(Integer roleId);

    List<NavVO> getNavList(String navName, Integer status);

    NavVO getNavVO(Integer navId);
}
